`*** DirPrint Version 2.0

`*** Written (W) 1993 Falk Rehwagen

`*** D-04103 Leipzig, Wintergartenstraße 2/107, Telefon (0341) 284343

`==========================================================================

`*** Definitionsteil für Compiler

NAME"DIR PRINT" ` Dateiname festlegen

CLASS"DirPrint V2.0" ` Dateiklasse festlegen

AUTHOR"Falk Rehwagen" ` Autorenname festlegen

STRLEN 100 ` Stringlänge für Operatoren

CODE $2800,$4200:CONST $4200,$5000 ` Speicherbereiche festlegen

`*** Deklarationsteil für Programmvariablen

BYTEVAR zähler,track,sektor,seitenzahl,p_seite,p_seiten ` Zwischenspeicher-Variablen

BYTEVAR papier,format,s_anfang,s_ende,diskflag,abbruch ` Dialogbox-Optionen

BYTEVAR ram_maske,rmaske_alt,startlfw ` Variablen für Druckersuche

BYTEVAR klickflag,wert ` Var's für Klick in Haupt-DB

BYTEVAR länge,reihen,druckseiten,reihenzahl ` Variablen für Papieraufteilung

STRVAR 20; seitentext ` Text für Seitenkennzeichen

ROW 640 BYTEVAR puffer ` Puffer für Grafikzeile

ROW 5 BYTEVAR datum2 ` Datum zwischenspeichern

STRVAR 2; string ` zur Seiteneingabe, Haupt-DB

BYTEVAR AT $84b3; selection ` enthält Icon-Blinkgeschw.

INTVAR AT $0400; xpos ` Cursor-Position

BYTEVAR icony,zeichen,icon ` Zwischenspeicher, Position

INTVAR iconx,zzähler,offset ` Zähler, Hilfsvariablen

ROW 1920 BYTEVAR druckpuffer ` Datenreihe für Druckertreiber

ROW 256 BYTEVAR AT $8000; diskpuffer ` Diskettenblock-Ablage

ROW 256 BYTEVAR AT $8100; diskpuffer2 ` zweiter Diskblock-Ablage

LABEL recover,disk_lesen,set_papier,set_seiten,klick,set_format,main ` Unterroutinen anmelden

LABEL drucken,drucken2,reihe_drucken,reihe_zeigen,icon_zeigen,neue_seite ` weitere Unterroutinen

LABEL tasten ` weitere Label

OBJFILE"DIR PRINT_obj" ` "DIR PRINT_obj"=Objektdatei

OBJECT icn_drucken,icn_lfw,icn_disk,icn_verlassen,c64_icon ` 5 Bitmaps einbinden

OBJECT university6 ` Zeichensatz für Ausdruck

`*** Anweisungsteil des Programms

`*** Grundaufbau des Bildschirms

CLS ` Bildschirm löschen (grau)

PATTERN 0 ` Muster weiß

RECT 5,169,314,194 ` Infofeld-Rechteck zeichnen

FRAME 5,169,314,194 ` Infofeld einrahmen

SETPOS 50,179 ` Cursorposition setzen

PRINT"/BDirPrint Version 2.0/P - (W) 1993 Falk Rehwagen" ` Text ausgeben

SETPOS 27,190 ` neue Cursorposition

PRINT"D-04103 Leipzig, Wintergartenstraße 2//107, Tel.: (0341) 284343" ` Text ausgeben

`*** Einlesen des Druckertreibers

startlfw=curdrive ` Startlfw zwischenspeichern

ram_maske=128 ` Flag für RAM-Lfw testen

REPEAT ` äußere Schleife, Anfang

zähler=0 ` Lfw-Zähler auf 0 setzen

REPEAT ` innere Schleife, Anfang

IF(((PEEK $88c6)AND 128)==ram_maske)THEN ` Bedingung Druckersuche

PRINTINIT druckpuffer ` Drucker suchen

ELSE ` sonst

iostat=5 ` als nicht gefunden melden

ENDIF ` Bedingung, Ende

DRIVE ` auf nächstes Lfw schalten

INC zähler ` zähler=zähler+1

UNTIL((iostat==0)OR(zähler==numdrives)) ` innere Schleife, Ende

rmaske_alt=ram_maske ` Lfw-Flag zwischenspeichern

ram_maske=0 ` 2. Durchlauf, nicht-RAM-Lfw

UNTIL((rmaske_alt==0)OR(iostat==0)) ` äußere Schleife, Ende

SETVECTOR $84b1,recover ` neue Wiederherstellroutine

IF(iostat<>0)THEN ` wenn Druckertr. unauffindbar

ERROR ` Fehlerbox anzeigen

END ` DeskTop aufrufen

ENDIF ` Bedingungsende

DEVICE startlfw ` Startlaufwerk wieder setzen

`*** Auswahlbox des Programms

@main ` Einsprung main

PATTERN 1:RECT 48,20,287,156 ` Box-Schatten zeichnen

PATTERN 0:RECT 40,12,279,148:FRAME 40,12,279,148 ` Fenster+Rahmen zeichnen

SETPOS 56,27:PRINT"/BDrucke das Inhaltsverzeichnis von Disk" ` Text ausgeben

SETPOS 56,40:PRINT"in Lfw "; ` Text ausgeben

PUT(57+curdrive):PUT 58 ` Lfw und ":" ausgeben

SETPOS 69,56:PRINT"Von DeskTop-Arbeitsseite:" ` Text ausgeben

FRAME 210,47,240,61 ` Eingabefeld markieren

SETPOS 75,73:PRINT"Bis DeskTop-Arbeitsseite:" ` Text ausgeben

FRAME 210,64,240,78 ` Eingabefeld markieren

SETPOS 69,98:PRINT"Einzelblattpapier" ` Text ausgeben

FRAME 56,91,64,99 ` Optionenfeld markieren

SETPOS 69,114:PRINT"Endlospapier" ` Text ausgeben

FRAME 56,107,64,115 ` Optionenfeld markieren

SETPOS 173,98:PRINT"Einfaches Format" ` Text ausgeben

FRAME 160,91,168,99 ` Optionenfeld markieren

SETPOS 173,114:PRINT"Erweitertes Format/P" ` Text ausgeben

FRAME 160,107,168,115 ` Optionenfeld markieren

GOSUB disk_lesen ` Arbeitsblatt-Anzahl einlesen

IF(diskflag==0)THEN ` wenn Disk eingelegt

BITMAP 6,125,icn_drucken ` dann drucken-Icon anzeigen

ENDIF ` Bedingungsende

IF(numdrives>1)THEN ` wenn mehrere Laufwerke

BITMAP 13,125,icn_lfw ` dann Lfw-Icon anzeigen

ENDIF ` Bedingungsende

IF(((PEEK $88c6)AND 128)==0)THEN ` wenn Lfw keine RAM-Disk

BITMAP 20,125,icn_disk ` dann Disk-Icon anzeigen

ENDIF ` Bedingungsende

BITMAP 27,125,icn_verlassen ` Verlassen-Icon anzeigen

SETPOS 124,40 ` Cursorpos. für Disk-Namen

IF(diskflag==0)THEN ` wenn Disk vorhanden

PRINT(DISKNAME) ` Namen ausgeben

ELSE ` sonst

PRINT"(keine Diskette vorhanden)" ` Hinweistext ausgeben

ENDIF ` Bedingungsende

set_papier:set_seiten:set_format ` Opti. und Seiten eintragen

ON 1 GOTO klick ` Vektor für Mausklick setzen

ON 0 GOTO tasten ` Vektor auf Tastaturabfrage

MOUSE ON ` Mauszeiger an

MAINLOOP ` Hauptschleife aufrufen

`*** Tastatur abfragen

@tasten ` Labeleinsprungstelle

zähler=0 ` Tastenflag löschen

IF(keydata==1)THEN ` wenn F1

zähler=8 ` dann Tastenflag für Lfw A

ENDIF ` Bedingungsende

IF(keydata==3)THEN ` wenn F3

zähler=9 ` dann Tastenflag für Lfw B

ENDIF ` Bedingungsende

IF(keydata==5)THEN ` wenn F5

zähler=10 ` dann Tastenflag für Lfw C

ENDIF ` Bedingungsende

IF(keydata==14)THEN ` wenn F7

zähler=11 ` dann Tastenflag für Lfw D

ENDIF ` Bedingungsende

IF(zähler<>0)THEN ` wenn Flag für Lfw gesetzt

IF((drtype<zähler>)<>0)THEN ` und gewünschtes Lfw da

IF(((PEEK $88c4)AND %01000000)<>0)THEN ` und Treiber im RAM

PATTERN 2 ` Muster grau

RECT 40,12,287,156 ` Hauptbox löschen

DEVICE zähler ` Laufwerk setzen

GOTO main ` zum Haupteinsprung gehen

ELSE ` sonst

IF((sysflag==$80)OR((drtype<zähler>)==(PEEK $88c6)))THEN ` 2 gleiche Lfw oder C128

PATTERN 2 ` Muster grau

RECT 40,12,287,156 ` Hauptbox löschen

DEVICE zähler ` Laufwerk setzen

GOTO main ` zum Haupteinsprung gehen

ENDIF ` Bedingungsende, wechslen

ENDIF ` Bedingungsende, RAM da

ENDIF ` Bedingungsende, Lfw da

ENDIF ` Bedingungsende, Lfwwechsel

RETURN ` zurückspringen

`*** Reaktion auf Klick in der Dialogbox

@klick ` Unterroutine klick

UNTIL(mousedata==0) ` beim Loslassen zurück

klickflag=255 ` Aktion vorbelegen, 255=keine

INTERRUPT OFF ` Maus anhalten

IF((REGION 48,125,95,140)AND(diskflag==0)):klickflag=0:ENDIF ` Klick auf drucken-Icon?

IF((REGION 104,125,151,140)AND(numdrives>1)):klickflag=1:ENDIF ` Klick auf Lfw-Icon?

IF((REGION 160,125,207,140)AND(((PEEK $88c6)AND 128)==0)):klickflag=2:ENDIF ` Klick auf Disk-Icon?

IF(REGION 216,125,271,140):klickflag=3:ENDIF ` Klick auf verlassen-Icon?

IF(REGION 210,47,240,61):klickflag=4:ENDIF ` Klick auf Anfangsseite?

IF(REGION 210,64,240,78):klickflag=5:ENDIF ` Klick auf Endseite?

IF(REGION 56,91,64,99):klickflag=6:ENDIF ` Klick auf Einzelblattpapier?

IF(REGION 56,107,64,115):klickflag=7:ENDIF ` Klick auf Endlospapier?

IF(REGION 160,91,168,99):klickflag=8:ENDIF ` Klick auf Normalformat?

IF(REGION 160,107,168,115):klickflag=9:ENDIF ` Klick auf erw. Format?

INTERRUPT ON ` Maus freigeben

IF(klickflag<=3)THEN ` wenn Klick auf Icon, dann

IF(klickflag==3)THEN ` wenn Klick auf verlassen

INVERT 216,125,271,140 ` verlassen invertieren

WAIT selection ` warten, GEOS-Vorgabezeit

INVERT 216,125,271,140 ` verlassen zurückinvertieren

ELSE ` sonst (anderes Icon)

INVERT(48+((INT klickflag)*56)),125,(95+((INT klickflag)*56)),140 ` Icon invertieren

WAIT selection ` warten, GEOS-Vorgabezeit

INVERT(48+((INT klickflag)*56)),125,(95+((INT klickflag)*56)),140 ` Icon zurückinvertieren

ENDIF ` Bedingungsende

PATTERN 2 ` Muster grau

RECT 40,12,287,156 ` Dialogbox löschen

IF(klickflag==3)THEN ` wenn Klick auf verlassen

PRINTDONE ` Druck abschließen

END ` zum DeskTop verlassen

ENDIF ` Bedingungsende

IF(klickflag==2)THEN ` wenn Klick auf Disk

DISK ` Disk-Dialogbox, anmelden

ENDIF ` Bedingungsende

IF(klickflag==1)THEN ` wenn Klick auf Lf-werk

DRIVE ` Lfwerk tauschen (A-B-C-D)

ENDIF ` Bedingungsende

IF(klickflag==0)GOSUB drucken ` bei drucken, Unterroutine

GOTO main ` zurück zur Haupt-DB

ENDIF ` Bedingungsende

IF(klickflag==4)THEN ` wenn Anfangseingabe-Klick

SETPOS 217,56 ` Cursor positionieren

string=(STR s_anfang) ` Zahl in String umwandeln

INPUT string ` Editieren der Zahl

wert=(BYTE(REAL string)) ` String in Zahl umwandeln

IF((wert>0)AND(wert<=s_ende))THEN ` wenn möglicher Bereich

s_anfang=wert ` dann, Anfangsseite setzen

ENDIF ` Bedingungsende, Bereich

set_seiten ` Bereich ordentlich anzeigen

ENDIF ` Bedingungsende, Anfangse.

IF(klickflag==5)THEN ` wenn Endeingabe-Klick

SETPOS 217,73 ` Cursor positionieren

string=(STR s_ende) ` Zahl in String umwandeln

INPUT string ` Editieren der Zahl

wert=(BYTE(REAL string)) ` String in Zahl umwandeln

IF((wert>=s_anfang)AND(wert<=seitenzahl))THEN ` wenn möglicher Bereich

s_ende=wert ` dann, Endseite setzen

ENDIF ` Bedingungsende, Bereich

set_seiten ` Bereich ordentlich anzeigen

ENDIF ` Bedingungsende, Endeingabe

IF(klickflag==6)THEN ` wenn Klick auf Einzelblatt

papier=0 ` dann, Flag setzen (=0)

set_papier ` Flag anzeigen

ENDIF ` Bedingungsende

IF(klickflag==7)THEN ` wenn Klick auf Endlospapier

papier=255 ` dann, Flag setzen (=255)

set_papier ` Flag anzeigen

ENDIF ` Bedingungsende

IF(klickflag==8)THEN ` wenn Klick auf Normalform

format=0 ` dann, Flag setzen (=0)

set_format ` Flag anzeigen

ENDIF ` Bedingungsende

IF(klickflag==9)THEN ` wenn Klick auf erweitert

format=255 ` dann, Flag setzen (=255)

set_format ` Flag anzeigen

ENDIF ` Bedingungsende

RETURN ` Klickabfrage verlassen

`*** Abbau von Standartdialogboxen

@recover ` Unterroutine recover

PATTERN 2 ` Muster grau

RECT 64,32,263,135 ` Standartbox löschen

RETURN ` zurückspringen

`*** Inhaltsverzeichnislänge bestimmen

@disk_lesen ` Unterroutine disk_lesen

OPENDISK ` Diskette öffnen

diskflag=iostat ` Fehler merken

s_anfang=0:s_ende=0 ` Standartanfang/-ende

IF(iostat==0)THEN ` ausführen, wenn kein Fehler

seitenzahl=0 ` Vorgabeseitenzahl=0

track=(PEEK $8200):sektor=(PEEK $8201) ` Starttrack/-sektor

REPEAT ` Schleife zum Einlesen

GETBLOCK track,sektor,diskpuffer ` Inhalsblock lesen

track=(PEEK $8000):sektor=(PEEK $8001) ` nächster Track/Sektor

INC seitenzahl ` seitenzahl=seitenzahl+1

UNTIL((track==0)OR(iostat<>0)) ` Schleifenende, Bedingung

IF(diskflag==0)THEN ` wenn kein Fehler

s_anfang=1:s_ende=seitenzahl ` dann richtige Grenzen setzen

ENDIF ` Bedingungsende, Grenzen

ENDIF ` Bedingungsende, Inhalt lesen

RETURN ` zurückspringen

`*** Anzeige der Seiten des Druckbereichs

@set_seiten ` Unterroutine set_seiten

PATTERN 0 ` Muster weiß

SETPOS 217,56:PRINT(STR s_anfang);:RECT xpos,48,239,60 ` Anfangsseite zeigen

SETPOS 217,73:PRINT(STR s_ende);:RECT xpos,65,239,77 ` Endseite zeigen

RETURN ` zurückspringen

`*** Setzen des Papiertyps

@set_papier ` Unterroutine set_papier

IF(papier==0)THEN ` wenn papier==0

PATTERN 2 ` dann Muster für 1. grau

ELSE ` sonst

PATTERN 0 ` Muster für 1. weiß

ENDIF ` Bedingungsende

RECT 57,92,63,98 ` Rechteck zeichnen

IF(papier<>0)THEN ` wenn papier nicht 0

PATTERN 2 ` dann Muster für 2. grau

ELSE ` sonst

PATTERN 0 ` Muster für 2. weiß

ENDIF ` Bedingungsende

RECT 57,108,63,114 ` Rechteck zeichnen

RETURN ` zurückspringen

`*** Setzen des Formats

@set_format ` Unterroutine set_format

IF(format==0)THEN ` wenn format==0

PATTERN 2 ` dann Muster für 1. grau

ELSE ` sonst

PATTERN 0 ` Muster für 1. weiß

ENDIF ` Bedingungsende

RECT 161,92,167,98 ` Rechteck zeichnen

IF(format<>0)THEN ` wenn format nicht 0

PATTERN 2 ` dann Muster für 2. grau

ELSE ` sonst

PATTERN 0 ` Muster für 2. weiß

ENDIF ` Bedingungsende

RECT 161,108,167,114 ` Rechteck zeichnen

RETURN ` zurückspringen

`*** Routine zum Test der Druckeranforderungen

@drucken ` Einsprunglabel

länge=(DIMY) ` Papierlänge bestimmen

reihen=((länge-3)/6) ` Iconreihen pro Seite ?

IF((länge<9)OR((DIMX)<>80))THEN ` Breite/Länge OK?

STRNBOX"/BProgramm für diesen","Drucker nicht geeignet.","" ` wenn nicht, Infobox

ELSE ` sonst

GOSUB drucken2 ` Druckroutine aufrufen

ENDIF ` Unterroutine drucken

RETURN ` Bedingungsende

` zurückspringen

`*** Ausgabe des Inhaltsverzeichnisses

@drucken2 ` Einsprunglabel

PATTERN 0 ` Muster weiß

RECT 90,80,230,120 ` Druckenbox ausgeben

FRAME 90,80,230,120 ` Druckenbox einrahmen

FRAME 90,80,231,121 ` 3D einrahmen

SETPOS 95,105 ` Cursor positionieren

PRINT"Abbruch mit der STOP-Taste" ` Abbruch-Text ausgeben

SETPOS 95,115 ` Cursor positionieren

PRINT"oder durch Mausklick!" ` Abbruch-Text ausgeben

abbruch=0 ` Abbruchflag setzen

POKE $39,0 ` letzen Mausklick löschen

p_seite=1 ` Seitenzähler auf 1 setzen

druckseiten=((s_ende-s_anfang)+1) ` Zähler für Gesamtreihen

p_seiten=((druckseiten/reihen)+1) ` Seitenanzahl bestimmen

track=0 ` track als Schleifenzähler

REPEAT ` Schleife

(datum2<track>)=(date<track>) ` Datum kopieren

INC track ` Zähler erhöhen

UNTIL(track==5) ` bis alles kopiert ist

GOSUB neue_seite ` Unterroutine für neue Seite

reihenzahl=reihen ` Zähler für Reihen/Seite

OPENDISK ` Diskette öffnen (BAM lesen)

track=(PEEK $8200):sektor=(PEEK $8201) ` Track/Sektor 1. Directorybl.

zähler=s_anfang ` Zähler Blöcke überspringen

WHILE(zähler<>1)DO ` Schleife bis alle überspr.

GETBLOCK track,sektor,diskpuffer ` Directoryblock einlesen

track=(diskpuffer<0>):sektor=(diskpuffer<1>) ` Track/Sektor des nächsten

DEC zähler ` Schleifenende

LOOP ` Track/Sektor 1. Druckblock

REPEAT ` Schleife Reihenausgabe

GETBLOCK track,sektor,diskpuffer ` Directoryblock einlesen

track=(PEEK $8000):sektor=(PEEK $8001) ` Verkettung merken

reihe_drucken ` Unterroutine Reihe ausgeben

DEC druckseiten ` Seitenzähler erniedrigen

DEC reihenzahl ` Reihenzähler erniedrigen

IF(reihenzahl==0)THEN ` wenn Seitenende

STOPPRINT ` Papier auswerfen

IF(papier==0)THEN ` wenn Einzelblattpapier

STRNBOX"/BBitte neue Seite einlegen,","um fortzusetzen.","" ` Aufforderungsbox

ENDIF ` Bedingungsende

GOSUB neue_seite ` Unterroutine neue Seite

reihenzahl=reihen ` Reihen pro Seite neu setzen

ENDIF ` Bedingungsende

GET zähler ` Tastaturcode einlesen

IF((zähler==22)OR(((PEEK $39) AND %00100000)<>0))THEN ` wenn STOP oder Mausklick

abbruch=255 ` Abbruchflag setzen

ENDIF ` Bedingungsende

UNTIL((druckseiten==0)OR(abbruch<>0)) ` bis alle Reihen ausgegeben

IF(abbruch==0)THEN ` wenn Abbruch, kein Durck

scrbuf=$40 ` nur in den Hintergrund

PATTERN 0 ` Muster weiß

RECT 0,0,319,96 ` Druckbereich löschen

FRAME 24,10,319,28:FRAME 0,58,295,76 ` Rahmen Kapazitätsausgabe

RECT 319,11,319,27:RECT 0,59,0,75 ` Trennlinie löschen

SETPOS 31,22:PRINT"/PDiskettenkapazität: /B"; ` Kapazität ausgeben

PRINT(STR(((CAPACITY 0)+1)/4)); ` Wert ausgeben

PRINT" KByte" ` KByte ausgeben

SETPOS 0,70:PRINT"/Pdavon belegt: /B"; ` belegt ausgeben

PRINT(STR(((CAPACITY 2)+1)/4)); ` Wert ausgeben

PRINT" KByte" ` KByte ausgeben

SETPOS 175,70:PRINT"/Pnoch frei: /B"; ` frei ausgeben

PRINT(STR(((CAPACITY 1)+1)/4)); ` Wert ausgeben

PRINT" KByte" ` KByte ausgeben

HARDCOPY 25,31,6,puffer ` Grafik an Drucker senden

scrbuf=$80 ` in Vordergrund schreiben

ENDIF ` Bedingungsende, drucken

PATTERN 2 ` Muster grau

RECT 90,80,231,121 ` Druckbox löschen

STOPPRINT ` Seite auswerfen

RETURN ` zurückspringen

`*** neue Seite beginnen

@neue_seite ` Einsprunglabel

PATTERN 0 ` Muster weiß

RECT 91,81,229,95 ` Seitebereich löschen

SETPOS 95,91 ` Cursor positionieren

PRINT"/BDrucke Seite "; ` Text ausgeben

PRINT(STR p_seite); ` Seitennummer ausgeben

PRINT"... /P" ` Text ausgeben

STARTPRINT ` neue Grafikseite beginnen

scrbuf=$40 ` nur in den Hintergrund

RECT 0,0,319,96 ` Druckbereich löschen

FRAME 24,0,319,18:FRAME 0,48,295,66 ` Rahmen zeichnen

RECT 319,1,319,17:RECT 0,49,0,65 ` Trennlinie entfernen

SETPOS 31,12:PRINT"Inhaltsverzeichnis der Diskette: /B"; ` Text eintragen

PRINT(DISKNAME) ` Diskettenamen ausgeben

SETPOS 0,60:PRINT"/Pgedruckt am: /B"; ` gedruckt ausgeben

PRINT((STR(datum2<2>))+"."); ` Tag ausgeben

PRINT((STR(datum2<1>))+"."); ` Monat ausgeben

PRINT((STR(datum2<0>))+" "); ` Jahr ausgeben

PRINT((STR(datum2<3>))+":"); ` Stunde ausgeben

PRINT(RIGHT("0"+(STR(datum2<4>))),2) ` Minuten 2-stellig ausgeben

seitentext=(("Seite "+(STR p_seite))+" von ") ` Seiten-Zeichenkette

seitentext=(seitentext+(STR p_seiten)) ` Zeichenkette erweitern

style=0 ` Stil auf PLAINTEXT

SETPOS(288-(PLEN seitentext)),60 ` rechtsbündig positionieren

PRINT seitentext ` Text ausgeben

HARDCOPY 25,31,4,puffer ` Grafik an Drucker senden

scrbuf=$80 ` Ausgabe auf Vordergrund

INC p_seite ` Seitennummer erhöhen

RETURN ` zurückspringen

`*** Routine zur Ausgabe einer Iconreihe

@reihe_drucken ` Einsprunglabel

reihe_zeigen ` Unterroutine Reihe aufbauen

HARDCOPY 25,31,6,puffer ` Grafik an Drucker senden

RETURN ` zurückspringen

`*** Iconreihe in den Hintergrund schreiben

@reihe_zeigen ` Einsprunglabel

scrbuf=$40 ` Ausgabe auf Hintergrund

style=0 ` Textstil PLAINTEXT

offset=2 ` Startbyte im Directory-Block

PATTERN 0 ` Muster 0 (weiß)

RECT 0,0,319,96 ` Druckpuffer löschen

icon=0 ` Zähler für Icon-Reihe setzen

REPEAT ` Schleife beginnen

IF(icon>3)THEN ` wenn rechter Teil

icony=48:iconx=((INT(icon-4))*72) ` dann unterer Bildschirmteil

ELSE ` sonst

icony=0:iconx=(32+((INT icon)*72)) ` oberer Bildschirmteil

ENDIF ` Bedingungsende

WINDOW(iconx+1),(icony+1),(iconx+70),(icony+46) ` Textausgabebegrenzung

icon_zeigen ` ein Icon in Druckpuffer

WINDOW ` Textbegrenzung aufheben

INC icon ` Iconzähler erhöhen

offset=(offset+32) ` nächster Directoryeintrag

UNTIL(icon==8) ` bis alle 8 Icons ausgegeben

icon=((s_ende-druckseiten)+1) ` Directoryseite ermittel

SETPOS(28-(PLEN(STR icon))),20 ` rechtsbündig positionieren

PRINT(STR icon) ` Nummer ausgeben

scrbuf=$80 ` Ausgabe auf Vordergrund

RETURN ` zurückspringen

`*** einzelnes Icon im Druckpuffer darstellen

@icon_zeigen ` Einsprunglabel

IF(format==0)THEN ` wenn einfache Ausgabeform

zeichen=((diskpuffer<offset>)AND %00111111) ` dann C= Dateityp bestimmen

IF(zeichen<>0)THEN ` Ausgabe, wenn nicht DEL

IF((zeichen>3)OR((diskpuffer<(offset+22)>)==0))THEN ` wenn Datei nicht-GEOS

BITMAP(LOW((iconx/8)+3)),(icony+5),c64_icon ` dann Standart-Icon

ELSE ` sonst

GETBLOCK(diskpuffer<(offset+19)>),(diskpuffer<(offset+20)>),diskpuffer2 ` Infoblock einlesen

(diskpuffer2<1>)=3 ` zu Bitmapobjekt

(diskpuffer2<2>)=21 ` verwandeln

(diskpuffer2<3>)=0 ` y-Koordinate als Word

BITMAP(LOW((iconx/8)+3)),(icony+5),(OBJECT AT $8101) ` Icon ausgeben

ENDIF ` Bedingungsende

FONT university6 ` Zeichensatz einstellen

seitentext="" ` Zeichenkette löschen

zzähler=3 ` Zeichenzähler für Dateiname

REPEAT ` Schleife Name einlesen

zeichen=(diskpuffer<(offset+zzähler)>) ` Zeichen holen

IF(zeichen<>$a0)THEN ` wenn nicht $a0

ADD seitentext,zeichen ` dem Namen hinzufügen

ENDIF ` Bedingungsende

INC zzähler ` Zähler erhöhen

UNTIL((zeichen==$a0)OR(zzähler==19)) ` bis Endzeichen oder Ende

SETPOS(iconx+(36-((PLEN seitentext)/2))),(icony+33) ` Ausgabeposition zentriert

PRINT seitentext ` Dateiname ausgeben

SYSFONT ` wieder Systemzeichensatz

ENDIF ` Bedingungsende

ELSE ` sonst (erweiterte Form)

zeichen=((diskpuffer<offset>)AND %00111111) ` C= Dateitypbestimmen

IF(zeichen<>0)THEN ` wenn nicht DEL

FRAME iconx,icony,(iconx+70),(icony+46) ` Rahmen für Icon ziehen

WINDOW(iconx+1),(icony+1),(iconx+69),(icony+45) ` eingeschränktes Textfenster

IF((zeichen>3)OR((diskpuffer<(offset+22)>)==0))THEN ` wenn Datei nicht-GEOS

BITMAP(LOW((iconx/8)+1)),(icony+3),c64_icon ` Standart-Icon ausgeben

ELSE ` sonst

GETBLOCK(diskpuffer<(offset+19)>),(diskpuffer<(offset+20)>),diskpuffer2 ` Infoblock einlesen

(diskpuffer2<1>)=3 ` in Bitmap-Objekt

(diskpuffer2<2>)=21 ` umwandeln

(diskpuffer2<3>)=0 ` Y-Koordniate als Word

BITMAP(LOW((iconx/8)+1)),(icony+3),(OBJECT AT $8101) ` Icon ausgeben

ENDIF ` Bedingungsende